import math
from typing import Any

"""
无依赖：仅用 Python 标准库math，Windows 下直接运行；
核心作用：当序列长度超过模型预训练长度时，通过对数函数调整注意力缩放因子，避免长序列注意力衰减。
"""


def yarn_get_mscale(scale: float = 1, mscale: float = 1) -> float:
    """原代码YARN缩放因子计算函数"""
    if scale <= 1:
        return 1.0
    return 0.1 * mscale * math.log(scale) + 1.0


class DeepSeekerDemo:
    def __init__(self):
        pass

    def demo(self, num: int):
        print(f"DeepSeek Demo {num}")

        # 添加__call__方法，使实例可以像函数一样被调用
        # def __call__(self, num: int):
        # 调用demo方法，实现参数传递
        self.demo(num)


# 独立执行验证
if __name__ == "__main__":
    # 测试场景1：序列长度未缩放（scale=1）
    print("场景1：scale=1 → mscale=", yarn_get_mscale(scale=1, mscale=1))  # 输出1.0

    # 测试场景2：序列长度缩放2倍（scale=2）
    print("场景2：scale=2 → mscale=", yarn_get_mscale(scale=2, mscale=1))  # 输出~1.0693

    # 测试场景3：序列长度缩放10倍（scale=10）
    print("场景3：scale=10 → mscale=", yarn_get_mscale(scale=10, mscale=1))  # 输出~1.2303

